package com.hongtai.mysql_json_study.dao;

import com.hongtai.mysql_json_study.pojo.Info;
import org.apache.ibatis.annotations.*;
import java.util.ArrayList;

public interface InfoDAO {

    /**
     * 新增1
     * @param info
     * @return
     */
    @Insert("insert into test_json(info) values(#{jsonobj})")
    Integer add1(Info info);

    /**
     * 新增2
     * @param xixixi123
     * @return
     */
    @Insert("insert into test_json(info) values(JSON_OBJECT('time', now(), 'ip', #{ip}, 'result', true))")
    Integer add2(@Param("ip") String xixixi123);

    /**
     * 查询json字段值
     * @param id
     * @return
     */
    @Select("select JSON_EXTRACT(info,'$.ip')as ip FROM test_json where id = #{id}")
    String findIpById(@Param("id") int id);

    /**
     * 查询json的key列表
     * @return
     */
    @Select("select json_keys(info) FROM test_json where id = #{id}")
    String findKeysById(@Param("id") int id);

    /**
     * 删除键
     * @param id
     * @return
     */
    @Update("UPDATE test_json SET info = json_remove(info,'$.ip') where id = #{id}")
    Integer deleteKey(@Param("id") int id);

    /**
     * 增加键、修改键值
     * @param key
     * @param value
     * @return
     */
    @Update("UPDATE test_json SET info = json_set(info,'$.${key}', #{value})  where id = #{id}")
    Integer changeKey(@Param("key") String key,@Param("value") String value, @Param("id") int id);

    /**
     * 查询
     * @param id
     * @return
     */
    @Select("select * from test_json where id = #{id}")
    @Results(
            id="infoMap",
            value={
                    @Result(column="id",property="id",id=true),
                    @Result(column="info",property="jsonobj",typeHandler=com.hongtai.mysql_json_study.handler.MySqlJsonHandler.class)
            }
    )
    Info findById(@Param("id") int id);

    /**
     * 查询所有
     * @return
     */
    @Select("select * from test_json")
    @ResultMap("infoMap")
    ArrayList<Info> findAll();


    /**
     * 其他搜索sql
     * 搜索1
     * SELECT * from test_json where JSON_EXTRACT( info, '$.b' ) like '%肥仔%';
     * 搜索2
     * SELECT * from test_json where JSON_EXTRACT( info, '$.b' ) = '小肥仔';
     *
     * #数组搜索
     * SELECT * FROM test_json WHERE JSON_CONTAINS(JSON_ARRAY("ccc","bbb","ddd"),info->'$.a') ORDER BY id DESC;
     *
     * #查询是否存在路径，JSON_CONTAINS_PATH(json字段，one_or_all，路径[，……])
     * #one表示只要有一个存在即可；all表示所有的都存在才行
     * SELECT * FROM test_json where JSON_CONTAINS_PATH(info,'one','$.c','$.c.d')
     *
     */
}
